//
//  DeviceManager.h
//  KaiXinDa
//
//  Created by stonesMonkey on 2018/11/13.
//  Copyright © 2018年 stonesMonkey. All rights reserved.
// 一些备注：
// 射频卡：扫描头
//

#import <Foundation/Foundation.h>

#import <ExternalAccessory/ExternalAccessory.h>



#define kKXDSafetyBox [KXDSafetyBox shareInstance]

@protocol iMateAppFaceDelegate <NSObject>
/*!
 *  iMateDelegateConnectStatus:
 * 当iMate蓝牙连接连通或者中断时，该方法被调用，通知目前的蓝牙连接状态
 * @param isConnecting YES 设备连接 NO 设备断开 *
 */
- (void)iMateDelegateConnectStatus:(BOOL)isConnecting;

/*!
 *  @protocol iMateDelegateModuleStatus:
 *
 * @param isWorking YES 设备运行正常 NO 设备运行异常  
 * 设备模块状态
 */  
- (void)iMateDelegateModuleStatus:(BOOL)isWorking;

/*!
 *  @protocol iMateDelegateNoResponse:
 *
 *设备响应状态代理
 @param error 设备无响应的􏰁述原因。原因格式:状态码 + 换行 + 􏰁述原因;
 状态码:-1表示程序内部错误。-2表示硬件异常 。􏰁述原因清晰易懂以达到快速 定位问题所在。 
 *
 * *
 */  
- (void)iMateDelegateNoResponse:(NSString *)error;


/*!
 * @protocol iMateDelegateScanQRCode: qrCodeData: error:
 * 二维码代码特征 *
 * @param returnCode 操作执行状态码 状态码:0 正常返回 -1 返回异常 * @param qrCodeData 二维码数据 格式:一段URL字符串
 * @param error 错误􏰁述信息 *
 */
-(void)iMateDelegateScanQRCode:(NSInteger)returnCode
                    qrCodeData:(NSString *)qrCodeData
                         error:(NSString *)error;

/*!
 * @protocol iMateDelegateFingerPrintFeature: fpData1: fpData2: error:
 * 指纹特征代理
 * @param returnCode 操作执行状态码 状态码:0 正常返回 -1 返回异常 * @param fpData1 指纹特征分量1
 * @param fpData2 指纹特征分量2
 * @param error 错误􏰁述信息
 */
-(void)iMateDelegateFingerPrintFeature:(NSInteger)returnCode
                               fpData1:(NSData *)fpData1
                               fpData2:(NSData *)fpData2
                                 error:(NSString *)error;


/*!
 *@protocol iMateDelegateFingerPrintTemplate:template:error:
 *指纹模板代理, 正常模板采集操作调用4次。
 *@param returnCode 操作执行状态码 1-第一次采集成功 2-第二次采集成功 3-第三次采
 集成功 0-返回模板数据 *@param theTemplate 采集成功返回的模板数据
 *@param error 错误􏰁述信息
 */
-(void)iMateDelegateFingerPrintTemplate:(NSInteger)returnCode
                               template:(NSData *)theTemplate
                                  error:(NSString *)error;



/**
 *
 *  @param returnCode   返回状态 0 成功
 *  @param information   iC卡信息
 IC卡复位信息|卡号|卡序号|等效二磁track2|aid|55域|脱机交易信息
 *  @param error      身份证人像面
 */
-(void)iMateDelegateICCardInfo:(NSInteger)returnCode
                   information:(NSString*)information
                         error:(NSString *)error;


/**
 * 等待刷卡(接触式IC卡、非接触式IC卡、磁卡)事件代理
 * @param returnCode 返回状态 0 成功
 * @param eventId 操作事件ID 1为磁条卡 2为IC卡 3射频卡 4为非接触式IC卡
 * @param data 操作返回数据 如果为磁条卡数据为二磁道信息。如果为接触式IC 卡号|卡类型|二磁道数据|三磁道数据
 卡、非接触式IC卡数据格式如上图。 * @param error 错误信息 */
-(void)iMateDelegateWaitEvent:(NSInteger)returnCode
                      eventId:(NSInteger)eventId
                         data:(NSData *)data
                        error:(NSString *)error;



/**
 * 刷卡代理
 * @param returnCode 返回状态 0 成功
 * @param track2 二磁道信息 数据格式如:
 6216913300109288=26122200183655700000
 * @param track3 三磁道信息
 * @param error 错误信息 */
-(void)iMateDelegateSwipeCard:(NSInteger)returnCode
                       track2:(NSString *)track2
                       track3:(NSString *)track3
                        error:(NSString *)error;

/**
 * 读身份证代理
 * @param returnCode 返回状态 0 成功
 * @param information 二代身份证信息
 * @param error 错误信息 */
//二代身份证信息以|分割并如下顺序:如 姓名|性别|民族|年|月|日|地址|公民身份证号| 签发机关|有效期
//有效期格式:2017.5.6-2022.5.6
- (void)iMateDelegateIDReadMessage:(NSInteger)returnCode
                       information:(NSData *)information
                             error:(NSString *)error;

/*!
 *  @protocol iMateDelegateIDCardPicture:headPhoto:
 *            nationalEmblemPhoto:identityWitness:error:
 读取身份证图像信息
 * @param returnCode 0 正常返回
 * @param photo 头像数据
 * @param NEphoto 身份证人像面
 * @param IWphoto 国徽面照片。 * @param error
 */
- (void)iMateDelegateIDCardPicture:(NSInteger)returnCode
                         headPhoto:(NSData *)photo
               nationalEmblemPhoto:(NSData*)NEphoto
                   identityWitness:(NSData*)IWphoto
                             error:(NSString *)error;

/*!
 * @protocol iMateDelegateIDCardExit:(NSInteger)returnCode * error:(NSString *)error
 * 退出身份证代理
 * @param returnCode 0 正常返回表示退出成功
 * @param error 退出失败􏰁述信息 */
- (void)iMateDelegateIDCardExit:(NSInteger)returnCode
                          error:(NSString *)error;


@end



@class EAAccessory;

@interface KXDSafetyBox : NSObject

@property (nonatomic, strong) NSMutableArray<EAAccessory *> *accessoryList;

@property (nonatomic, weak)id<iMateAppFaceDelegate> delegate;

+ (instancetype)shareInstance;


#pragma mark - 客户要求的方法
// 扫描
- (void)scanQRCode:(NSInteger)timeout;
// 读取指纹特征
- (void)readFingerPrintFeature:(NSInteger)timeout;
// 读取指纹模板
- (void)readFingerPrintTemplate:(NSInteger)timeout;
// 磁条刷卡
- (void)readMagneticCard:(NSInteger)timeOut;
// 读身份证信息
-(void)readIDCardInformation:(NSInteger)timeout;
// operation 1 – 读取头像 2 – 读取正反扫􏰁件 3 – 读取所有图片
-(void)readIDCardPicture:(NSInteger)operation timeout:(NSInteger)timeout;
/**
 slot = 2, // 卡槽/读卡口读卡
 slot = 4, // SAM卡座
 */
-(void)readICCardInformation:(NSInteger)slot aid:(NSString*)aid timeout:(NSInteger)timeOut;
// 3.7 等待刷卡(接触式IC卡、非接触式IC卡、磁卡)事件
- (void)waitSwipeCardEvent:(Byte)eventMask timeout:(NSInteger)timeout;
// 3.8 退出身份证事件
- (void)exitIDCard;



@end
